<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Contest extends MX_Controller {

	private $module = 'contest';
	private $table = 'contest';
	function __construct(){
		parent::__construct();
		$this->load->model($this->module.'_model','model');
		$this->load->model('admincp_modules/admincp_modules_model');
		$this->load->library('form_validation');
		if($this->uri->segment(1)=='admincp'){
			if($this->uri->segment(2)!='login'){
				if(!$this->session->userdata('userInfo')){
					header('Location: '.PATH_URL.'admincp/login');
					return false;
				}
				$get_module = $this->admincp_modules_model->check_modules($this->uri->segment(2));
				$this->session->set_userdata('ID_Module',$get_module[0]->id);
				$this->session->set_userdata('Name_Module',$get_module[0]->name);
			}
			$this->template->set_template('admin');
			$this->template->write('title','Admin Control Panel');
		}
	}
	/*------------------------------------ Admin Control Panel ------------------------------------*/
	public function admincp_index(){
		modules::run('admincp/chk_perm',$this->session->userdata('ID_Module'),'r',0);
		$default_func = 'created';
		$default_sort = 'DESC';
		$data = array(
			'module'=>$this->module,
			'module_name'=>$this->session->userdata('Name_Module'),
			'default_func'=>$default_func,
			'default_sort'=>$default_sort
		);
		$this->template->write_view('content','BACKEND/index',$data);
		$this->template->render();
	}
	
	
	public function admincp_update($id=0){
		if($id==0){
			modules::run('admincp/chk_perm',$this->session->userdata('ID_Module'),'w',0);
		}else{
			modules::run('admincp/chk_perm',$this->session->userdata('ID_Module'),'r',0);
		}
		$result[0] = array();
		if($id!=0){
			$result = $this->model->getDetailManagement($id);
		}
		$data = array(
			'result'=>$result[0],
			'module'=>$this->module,
			'id'=>$id
		);
		$this->template->write_view('content','BACKEND/ajax_editContent',$data);
		$this->template->render();
	}

	public function admincp_save(){
		$perm = modules::run('admincp/chk_perm',$this->session->userdata('ID_Module'),'w',1);
		if($perm=='permission-denied'){
			print $perm;
			exit;
		}
		if($_POST){
			//Upload Image
			$fileName = array('image'=>'');
			if($_FILES){
				foreach($fileName as $k=>$v){
					if(isset($_FILES['fileAdmincp']['error'])){
						$typeFileImage = strtolower(substr($_FILES['fileAdmincp']['type'],0,5));
						if($typeFileImage == 'image'){
							$tmp_name = $_FILES['fileAdmincp']["tmp_name"];
							$file_name = $_FILES['fileAdmincp']['name'];
							$ext = strtolower(substr($file_name, -4, 4));
							if($ext=='jpeg'){
								$fileName = time().'_'.SEO(substr($file_name,0,-5)).'.jpg';
							}else{
								$fileName = time().'_'.SEO(substr($file_name,0,-4)).$ext;
							}
						}else{
							print 'Only upload Image.';
							exit;
						}
					}
				}
			}
			//End Upload Image

			if($this->model->saveManagement($fileName)){
				//Upload Image
				if($_FILES){
					foreach($fileName as $k=>$v){
						if(isset($_FILES['fileAdmincp']['error'])){
							$upload_path = BASEFOLDER.DIR_UPLOAD_NEWS;
							move_uploaded_file($tmp_name, $upload_path.$fileName);
						}
					}
				}
				//End Upload Image
				print 'success';
				exit;
			}
		}
	}
	
	public function admincp_delete(){
		$perm = modules::run('admincp/chk_perm',$this->session->userdata('ID_Module'),'d',1);
		if($perm=='permission-denied'){
			print $perm;
			exit;
		}
		if($this->input->post('id')){
			$id = $this->input->post('id');
			$result = $this->model->getDetailManagement($id);
			modules::run('admincp/saveLog',$this->module,$id,'Delete','Delete');
			$this->db->where('id',$id);
			if($this->db->delete(PREFIX.$this->table)){
				//Xóa hình khi Delete
				@unlink(BASEFOLDER.DIR_UPLOAD_NEWS.$result[0]->image);
				return true;
			}
		}
	}
	
	public function admincp_ajaxLoadContent(){
		$this->load->library('AdminPagination');
		$config['total_rows'] = $this->model->getTotalsearchContent();
		$config['per_page'] = $this->input->post('per_page');
		$config['num_links'] = 3;
		$config['func_ajax'] = 'searchContent';
		$config['start'] = $this->input->post('start');
		$this->adminpagination->initialize($config);

		$result = $this->model->getsearchContent($config['per_page'],$this->input->post('start'));
		$data = array(
			'result'=>$result,
			'per_page'=>$this->input->post('per_page'),
			'start'=>$this->input->post('start'),
			'module'=>$this->module
		);
		$this->session->set_userdata('start',$this->input->post('start'));
		$this->load->view('BACKEND/ajax_loadContent',$data);
	}
	
	public function admincp_ajaxUpdateStatus(){
		$perm = modules::run('admincp/chk_perm',$this->session->userdata('ID_Module'),'w',1);
		if($perm=='permission-denied'){
			print '<script type="text/javascript">show_perm_denied()</script>';
			$status = $this->input->post('status');
			$data = array(
				'status'=>$status
			);
		}else{
			if($this->input->post('status')==0){
				$status = 1;
			}else{
				$status = 0;
			}
			$data = array(
				'status'=>$status
			);
			modules::run('admincp/saveLog',$this->module,$this->input->post('id'),'status','update',$this->input->post('status'),$status);
			$this->db->where('id', $this->input->post('id'));
			$this->db->update(PREFIX.$this->table, $data);
		}
		
		$update = array(
			'status'=>$status,
			'id'=>$this->input->post('id'),
			'module'=>$this->module
		);
		$this->load->view('BACKEND/ajax_updateStatus',$update);
	}
	/*------------------------------------ End Admin Control Panel --------------------------------*/
	
	
	/*------------------------------------ FRONTEND ------------------------------------*/	
	public function contest_register()
	{
		$data = array();
		if ($_POST){
			$json_data = NULL;
			// BEGIN PARAM
			$image = $this->input->post('image');
			$fullname = $this->input->post('fullname');
			$email = $this->input->post('email');
			$address = $this->input->post('address');
			$phone = $this->input->post('phone');
			$file_type = substr($image,-4,4);
			// END PARAM
			
			// Kiểm tra image
			
			$upload_type = $this->_upload_type($file_type);
			if($upload_type)
			{
				$json_data = array('status'=>"0",'code'=>'image-error','message'=>'Bạn vui lòng chọn lại hình ảnh');
			}
			
			// Kiểm tra fullname
			if(empty($json_data))
			{
				if(isset($fullname)) {
					$validate_fullname = $this->_check_fullname($fullname,'fullname',5,99);
					if ($validate_fullname) {
						$json_data = $validate_fullname;
					}
				}
			}
			
			// Kiểm tra email
			if(empty($json_data))
			{
				if (isset($email)) {
					$validate_email = $this->_check_email($email,'email',TBL_USERS,15,99);
					if ($validate_email) {
						$json_data = $validate_email;
					}
				}
			}
			
			// Kiểm tra address
			if(empty($json_data))
			{
				if (isset($address)) {
					$validate_address = $this->_check_address($address,'address',10,99);
					if ($validate_address) {
						$json_data = $validate_address;
					}
				}
			}
			
			/*
			*
			*	Kiểm tra tính hợp lệ của số điện thoại
			*	Max length
			*	Min length
			*	Numeric
			*
			*/
			if(empty($json_data))
			{
				if (isset($phone)) {
					$validate_phone = $this->_check_phone($phone,'phone',10,11);
					if ($validate_phone) {
						$json_data = $validate_phone;
					}
				}
			}
			
			//Upload Image
			$fileName = '';
			if($_FILES){
				if(isset($_FILES['fileFrontend']['error'])){
					$typeFileImage = strtolower(substr($_FILES['fileFrontend']['type'],0,5));
					if($typeFileImage == 'image'){
						$tmp_name = $_FILES['fileFrontend']["tmp_name"];
						$file_name = $_FILES['fileFrontend']['name'];
						$ext = strtolower(substr($file_name, -4, 4));
						if($ext=='jpeg'){
							$fileName = time().'_'.SEO(substr($file_name,0,-5)).'.jpg';
						}else{
							$fileName = time().'_'.SEO(substr($file_name,0,-4)).$ext;
						}
					}
				}
			}
			
			//End Upload Image
			if (!empty($json_data)) {
				echo json_encode($json_data);
			}else{
				$data_insert = array();
				$data_user 	 = array();
				$data_user['fb_id']			= 1; //$this->session->userdata('ss_fb_id');
				$data_user['fullname'] 		= $fullname;
				$data_user['email'] 		= $email;
				$data_user['phone'] 		= $phone;
				$data_user['address'] 		= $address;
				$data_user['created'] 		= getNow();
				$data_user['modified']		= getNow();
					
				if($this->model->contest_user($data_user))
				{
					$data_insert['fb_id']		= 1; //$this->session->userdata('ss_fb_id');
					$data_insert['image'] 		= $fileName;
					$data_insert['status']		= 1;
					$data_insert['week']		= getWeek();
					$data_insert['created'] 	= getNow();
					$data_insert['modified']	= getNow();
					$data_insert['user_id'] = $this->db->insert_id();
					
					if($this->model->contest_register($data_insert))
					{
						if($_FILES){
							if(isset($_FILES['fileFrontend']['error'])){
								move_uploaded_file($tmp_name, DIR_PARENT_CONTEST.$fileName);
								contest_upload_image($fileName,DIR_CONTEST_THUMB,250,250);
							}
						}
						$json_data = array('status' => "1",'code' => "success-error",'message' => 'Đăng ký thành công.');
					}else{
						$json_data = array('status' => "0",'code' => "fail-error",'message' => 'Đăng ký thất bại.');
					}
				}else{
					$json_data = array('status' => "0",'code' => "fail-error",'message' => 'Đăng ký thất bại.');
				}
				echo json_encode($json_data);
			}
			exit();
		}
		$this->template->write('title','Gửi bài dự thi');
		$this->template->write_view('content','FRONTEND/contest_register',$data);
		$this->template->render();
	}
	
	/*
	*
	*
	*	BEGIN Validate
	*
	*/
	public function _check_fullname($fullname,$error,$min = 10,$max = 99)
	{
		$data = array();
		if(!$this->form_validation->required($fullname))
		{
			$data = array(
                'status' => 0,
                'code' => $error.'-error',
                'message' => 'Vui lòng nhập '.$error.' của bạn. Bug 1'
            );
            return $data;
		}
		
		if(!$this->form_validation->max_length($fullname,$max))
		{
			$data = array(
                'status' => 0,
                'code' => $error.'-error',
                'message' => 'Vui lòng nhập '.$error.' của bạn. Bug 2'
            );
            return $data;
		}
		
		if(!$this->form_validation->min_length($fullname,$min))
		{
			$data = array(
                'status' => 0,
                'code' => $error.'-error',
                'message' => 'Vui lòng nhập '.$error.' của bạn. Bug 3'
            );
            return $data;
		}
		return false;
	}
	
	public function _check_phone($phone,$error,$min = 10,$max = 11)
	{
		$data = array();
		if(!$this->form_validation->required($phone))
		{
			$data = array(
                'status' => 0,
                'code' => $error.'-error',
                'message' => 'Vui lòng nhập '.$error.' của bạn. Bug 1'
            );
            return $data;
		}
		
		if(!$this->form_validation->max_length($phone,$max))
		{
			$data = array(
                'status' => 0,
                'code' => $error.'-error',
                'message' => 'Vui lòng nhập '.$error.' của bạn. Bug 2'
            );
            return $data;
		}
		
		if(!$this->form_validation->min_length($phone,$min))
		{
			$data = array(
                'status' => 0,
                'code' => $error.'-error',
                'message' => 'Vui lòng nhập '.$error.' của bạn. Bug 3'
            );
            return $data;
		}
		
		if(!$this->form_validation->numeric($phone))
		{
			$data = array(
                'status' => 0,
                'code' => $error.'-error',
                'message' => 'Vui lòng nhập '.$error.' của bạn. Bug 4'
            );
            return $data;
		}
		return false;
	}
	
	public function _check_address($address,$error,$min = 15,$max = 99)
	{
		$data = array();
		if(!$this->form_validation->required($address))
		{
			$data = array(
                'status' => 0,
                'code' => $error.'-error',
                'message' => 'Vui lòng nhập '.$error.' của bạn. Bug 1'
            );
            return $data;
		}
		
		if(!$this->form_validation->max_length($address,$max))
		{
			$data = array(
                'status' => 0,
                'code' => $error.'-error',
                'message' => 'Vui lòng nhập '.$error.' của bạn. Bug 2'
            );
            return $data;
		}
		
		if(!$this->form_validation->min_length($address,$min))
		{
			$data = array(
                'status' => 0,
                'code' => $error.'-error',
                'message' => 'Vui lòng nhập '.$error.' của bạn. Bug 3'
            );
            return $data;
		}
		return false;
	}
	
	public function _check_email($email,$error,$table,$min = 15,$max = 99)
	{
		$data = array();
		if(!$this->form_validation->required($email))
		{
			$data = array(
                'status' => 0,
                'code' => $error.'-error',
                'message' => 'Vui lòng nhập '.$error.' của bạn.'
            );
            return $data;
		}
		
		if(!$this->form_validation->valid_email($email))
		{
			$data = array(
                'status' => 0,
                'code' => $error.'-error',
                'message' => 'Vui lòng nhập '.$error.' của bạn.'
            );
            return $data;
		}
		
		if(!$this->form_validation->max_length($email,$max))
		{
			$data = array(
                'status' => 0,
                'code' => $error.'-error',
                'message' => 'Vui lòng nhập '.$error.' của bạn.'
            );
            return $data;
		}
		
		if(!$this->form_validation->min_length($email,$min))
		{
			$data = array(
                'status' => 0,
                'code' => $error.'-error',
                'message' => 'Vui lòng nhập '.$error.' của bạn.'
            );
            return $data;
		}
		
		if(!$this->form_validation->is_unique($email,$table.'.email'))
		{
			$data = array(
                'status' => 0,
                'code' => $error.'-error',
                'message' => $error.' của bạn đã tồn tại.'
            );
            return $data;
		}
		return false;
	}
	
	public function _check_birth($birth,$error,$table,$min = 15,$max = 99)
	{
		$data = array();
		$birthday = explode("/",$birth);
		if(!$this->form_validation->required($birth[0]))
		{
			$data = array(
                'status' => 0,
                'code' => $error.'-error',
                'message' => 'Vui lòng chọn '.$birth.' của bạn.'
            );
            return $data;
		}
		
		if(!$this->form_validation->is_numeric($birth[0]) || !min_length($birth[0]))
		{
			$data = array(
                'status' => 0,
                'code' => $error.'-error',
                'message' => 'Vui lòng chọn '.$birth.' của bạn.'
            );
            return $data;
		}
		return false;
	}
	
	public function _check_comment($comment,$error,$min,$max)
	{
		$data = array();
		if(!$this->form_validation->required($comment))
		{
			$data = array(
                'status' => 0,
                'code' => $error.'-error',
                'message' => 'Vui lòng nhập '.$error.' của bạn.'
            );
            return $data;
		}
		
		if(!$this->form_validation->max_length($comment,254))
		{
			$data = array(
                'status' => 0,
                'code' => $error.'-error',
                'message' => 'Vui lòng nhập '.$error.' của bạn.'
            );
            return $data;
		}
		
		if(!$this->form_validation->min_length($comment,20))
		{
			$data = array(
                'status' => 0,
                'code' => $error.'-error',
                'message' => 'Vui lòng nhập '.$error.' của bạn.'
            );
            return $data;
		}
		return false;
	}
	// END Validate
	
	public function contest_list($week = "1",$sort = "created",$start = 0,$limit = 8)
	{
		$data = array();
		$this->load->library('Pagination');
		$config['total_rows'] = $this->model->count_contest_list($week);
		$config['base_url'] = PATH_URL.'danh-sach-bai-thi/'.$week.'/'.$sort.'/';
		$config['per_page'] = $limit;
		$config['num_links'] = 2;
		$config['uri_segment'] = 4;
		$this->pagination->initialize($config);	
		
		$data['contest_list'] = $this->model->contest_list($week,$sort,$limit,$start);
		$data['start'] = $start;
		$data['week'] = $week;
		$data['sort'] = $sort;
		$this->template->write('title','Danh sách bài dự thi');
		$this->template->write_view('content','FRONTEND/contest_list',$data);
		$this->template->render();
	}
	
	
	public function contest_ajax_list($week = "1",$sort = "created",$start = 0,$limit = 8)
	{
		$data = array();
		$this->load->library('Pagination');
		$config['total_rows'] = $this->model->count_contest_list($week);
		$config['base_url'] = PATH_URL.'danh-sach-bai-thi/'.$week.'/'.$sort.'/';
		$config['per_page'] = $limit;
		$config['num_links'] = 2;
		$config['uri_segment'] = 4;
		$this->pagination->initialize($config);	
		
		$data['contest_list'] = $this->model->contest_list($week,$sort,$limit,$start);
		$data['start'] = $start;
		$data['week'] = $week;
		$data['sort'] = $sort;
		$this->template->write_view('content','FRONTEND/contest_ajax_list',$data);
	}
	
	public function contest_detail($id)
	{
		$data = array();
		$ss_fb_id = $this->session->userdata('ss_fb_id');
		$data['contest_detail'] = $this->model->contest_detail($id);
		// Kiểm tra user hiện tại đã like cho bài này chưa
		$data['check_like'] 	= $this->model->contest_check_like($ss_fb_id,$id);
		// Danh cho phan share
		$contest_id = isset($contest_detail[0]->id)?$contest_detail[0]->id:0;
		$contest_share_comment = FB_REDIRECT_PAGE."&app_data=".rawurlencode('{"id":"'.$contest_id.'"}');
		$contest_title = isset($contest_detail[0]->title)?$contest_detail[0]->title:'';
		$contest_description = isset($contest_detail[0]->description)?$contest_detail[0]->description:'';
		$contest_image = is_file(LINK_THUMB_PG.$contest_detail[0]->image_thumb);
		
		$data['comment'] 		= $contest_share_comment;
		$data['link_share'] 	= 'https://www.facebook.com/sharer/sharer.php?s=100&p%5bmedium%5d=106&p%5btitle%5d='.urlencode($contest_title).'&p[summary]='.urlencode($contest_description).'&p[url]='.urlencode($contest_share_comment).'&p[images][0]=' . urlencode($contest_image);
		$data['next'] = $this->model->get_next($contest_id);
		$data['prev'] = $this->model->get_prev($contest_id);
		
		$this->template->write('title','Chi tiết bài thi');
		$this->template->write_view('content','contest_detail',$data);
		$this->template->render();
	}
	
	public function contest_rule()
	{
		$this->template->write('title','Thể lệ');
		$this->template->write_view('content','contest_rule',$data);
		$this->template->render();
	}
	
	public function contest_winner()
	{
		$data = array();
		$data['result'] = $this->model->contest_winner();
		$this->template->write('title','Danh sách thắng giải');
		$this->template->write_view('content','contest_winner',$data);
		$this->template->render();
	}
		
	public function contest_comment()
	{
		if($_POST)
		{
			$id = $this->input->post('id');
			$message = $this->input->post('message');
			$ss_user_id = $this->session->userdata('ss_fb_id');
			$ip = getIp();
			$json_data = NULL;
			
			if(empty($json_data))
			{
				if(isset($message)) {
					$validate_message = $this->check_comment($message,'message',5,255);
					if ($validate_message) {
						$json_data = $validate_message;
					}
				}
			}
			
			if(!empty($json_data)){
				echo json_decode($json_data);
			}else{
				$data = array();
				$data['message'] = $message;
				$data['contest_id'] = $id;
				$data['user_id'] = $ss_user_id;
				$data['ip'] = $ip;
				$data['created'] = getNow();
				$data['modified'] = getNow();
				$check_like = $this->model->contest_comment($data);
				if($check_like)
				{
					$json_data = array('status' => 1,'code' => "comment-error",'message' => 'Cảm ơn bạn đã bình luận.');
				}
				echo json_decode($json_data);
			}
			exit();
		}
	}
	
	public function contest_like()
	{
		$ss_user_id = $this->session->userdata('ss_fb_id');
		$id = $this->input->post('id');
		$current_week = getWeek();
		$ip = getIp();
		$json_data = NULL;
		
		/*
		*
		* Kiểm tra ss_fb_id đã like cho bài hay chua
		* Nếu đã like thì thông báo lỗi
		*
		*/
		if(empty($json_data)){
			$check_like = $this->model->contest_check_like($ss_fb_id,$id);
			if($check_like)
			{
				$json_data = array('status' => 0,'error' => "like-error",'message' => 'Bạn đã bình chọn bài thì này rồi.');
			}
		}
		
		/*
		*
		* Kiểm tra Ip like đã vượt quá 5 lần like
		* PARAM: ip
		* RESPONSE: boolean
		*/
		if(empty($json_data)){
			$check_like_ip = $this->model->contest_check_ip($ip,$id);
			if($check_like_ip)
			{
				$json_data = array('status' => 0,'error' => "like-error",'message' => 'Ip của bạn đã bình chọn quá số lượt cho phép.');
			}
		}
		
		/*
		*
		* Kiểm tra thời gian like
		* PARAM: id
		* 
		*
		*/
		if(empty($json_data)){
			$contest_detail = $this->model->contest_detail($id);
			$contest_week = $contest_detail[0]->week;
			if($contest_week != $current_week)
			{
				$json_data = array('status' => 0,'error' => "like-error",'message' => 'Thời gian bình chọn đã hết.');
			}
		}
		
		/*
		*
		* Kiểm tra ip có nằm trong blacklist
		* PARAM: ip
		* 
		*/
		if(empty($json_data)){
			$check_ban = $this->model->contest_check_ban($ip);
			if($check_ban)
			{
				$json_data = array('status' => 0,'error' => "like-error",'message' => 'IP của bạn nằm trong danh sách blacklist.');
			}
		}
		
		if (!empty($json_data)) {
			echo json_encode($json_data);
		} else {
			$data = array();
			$data['contest_id'] = $id;
			$data['fb_id']		= $ss_fb_id;
			$data['status'] 	= 1;
			$data['created'] 	= getNow();
			$data['modified'] 	= getNow();
			
			if($this->model->insert(TBL_LIKE,$data))
			{
				// Với trường hợp hệ thống tự tính like
				$count_like = $this->model->contest_detail($id);
				// Với trường hợp admin tự chỉnh like
				//$count_like = $contest_detail[0]->like + 1;
				$json_data = array('status' => "1",'error' => "like-error",'message' => 'Bình chọn thành công.','count_like' => $count_like[0]->count_like);
			}else{
				$json_data = array('status' => "0",'error' => "like-error",'message' => 'Có lỗi xảy ra trong quá trình xử lý.');
			}
			echo json_encode($json_data);
		}
		exit();
	}
	
	function _upload_type($type)
	{
		$return_type = false;
		switch(strtolower($type))
		{
			case '.jpg':
				$return_type =  true;
				break;
			case 'jpeg': 
				$return_type =  true;
				break;
			case '.gif': 
				$return_type =  true;
				break;
			case '.png': 
				$return_type =  true;
				break;
			default:
				$return_type =  false;
				break;
		}
		return $return_type;
	}
	/*------------------------------------ End FRONTEND --------------------------------*/
}